package com.pilipala.service;

import com.pilipala.dto.SearchDTO;
import com.pilipala.dto.UserDTO;
import com.pilipala.dto.UserLoginDTO;
import com.pilipala.dto.UserPrivateDTO;
import com.pilipala.entity.User;
import com.pilipala.result.PageResult;
import com.pilipala.vo.UserLoginVO;
import com.pilipala.vo.UserVO;
import org.springframework.web.multipart.MultipartFile;


public interface UserService {
    /**
     * 登录业务
     * @param userLoginDTO 登录dto
     * @return 返回包含Token的VO
     */
    UserLoginVO login(UserLoginDTO userLoginDTO);

    /**
     * 更新用户
     * @param userDTO 包含用户所有信息
     */
    void update(UserDTO userDTO);

    /**
     * 更新用户密码
     * @param passwordDTO 密码、邮箱、验证码
     */
    void updatePrivate(UserPrivateDTO passwordDTO);

    UserVO getUserById(Long id);

    /**
     * 上传用户头像
     * @param file 图片文件
     */
    void uploadAvatar(MultipartFile file);

    /**
     * 关于用户的搜索接口
     * @param searchDTO 包括页码、页大小、搜索关键字、排序类型
     * @return 返回分页后的用户
     */
    PageResult search(SearchDTO searchDTO);

    /**
     * 关注用户
     * @param followedId 被关注人的Id
     */
    void follow(Long followedId);


    /**
     * 获取关注人的Id
     * @param searchDTO 有效数据只有页码和页大小
     * @return 获取到分页后的数据
     */
    PageResult getFollowed(SearchDTO searchDTO);
}
